﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Helena.Areas.Productos.Models;
using Telerik.Web.Mvc;
using Helena.Areas.Categorias.Models;
using Helena.Areas.Campanas.Models;
using Helena.Areas.Configuraciones.Models;
using System.Threading;
using Helena.Areas.Vendedores.Models;
using Helena.Areas.Ventas.Models;
using Helena.Areas.Clientes.Models;
using Helena.Areas.Reportes.Models;

namespace Helena.Areas.Ventas.Controllers
{
    public class AnularController : Controller
    {
        LogicaVenta db = new LogicaVenta();
        LogicaCategoria cat_db = new LogicaCategoria();
        LogicaCampana cam_db = new LogicaCampana();
        LogicaUnidad uni_db = new LogicaUnidad();
        LogicaProducto pro_db = new LogicaProducto();
        LogicaConfiguraciones conf_db = new LogicaConfiguraciones();
        LogicaCliente cli_db = new LogicaCliente();
        LogicaVendedor vnd_db = new LogicaVendedor();
        LogicaTarjeta tar_db = new LogicaTarjeta();
        LogicaKardex kardex = new LogicaKardex();
        
        //
        // GET: /Ventas/Anular/
        [AcceptVerbs(HttpVerbs.Get)]
        public ActionResult Index()
        {
            VendedorView vw = (VendedorView)Session["Vendedor"];
            if (vw.ID != 0)
            {
                VentaView venta = new VentaView();
                Session["Productos"] = pro_db.i_RetornarProductos().Where(e => e.Estado == true);
                Session["Unidades"] = uni_db.i_RetornarUnidades().Where(u => u.Estado == true);
                Session["clientes"] = cli_db.i_RetornarClientes();
                Session["Tarjetas"] = tar_db.i_RetornarTarjetas();
                Session["Configuracion"] = conf_db.ObtenerUltimaConfiguracion();
                return View(venta);
            }
            else
            {
                return Redirect("../Home/NoSession");
            }

        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Index(VentaView v)
        {
            VendedorView vw = (VendedorView)Session["Vendedor"];
            try
            {
                    VentaView venta = new VentaView();
                    try
                    {
                        if (v.Ticket != 0)
                        {
                            venta = db.i_RetornarVentas().Where(m => m.Ticket == v.Ticket).Where(l => l.Estado == true).SingleOrDefault();
                            ViewData["DetalleVenta"] = db.DetallesDeUnaVenta(venta.ID);
                        }
                        else
                        {
                            if (v.Boleta != 0)
                            {
                                venta = db.i_RetornarVentas().Where(m => m.Boleta == v.Boleta).Where(l=>l.Estado==true).SingleOrDefault();
                                ViewData["DetalleVenta"] = db.DetallesDeUnaVenta(venta.ID);
                            }
                            else
                            {
                                venta = db.i_RetornarVentas().Where(m => m.Factura == v.Factura).Where(l => l.Estado == true).SingleOrDefault();
                                ViewData["DetalleVenta"] = db.DetallesDeUnaVenta(venta.ID);
                            }
                        }
                        Session["Anular"] = venta;
                        return View(venta);
                    }
                    catch
                    {
                        Session["Anular"] = venta;
                        return View(venta);
                    }
            }
            catch
            {
                return Redirect("../Home/NoSession");
            }
            
        }

        [GridAction]
        public ActionResult Select ()
        {
            ICollection<DetalleVentaView> salida = (ICollection<DetalleVentaView>)ViewData["DetalleVenta"];
            return View(new GridModel(salida));
        }

        public ActionResult Anular()
        {
            VentaView anular = (VentaView)Session["Anular"];
            List<DetalleVentaView> detalles = db.DetallesDeUnaVenta(anular.ID);

            foreach (DetalleVentaView d in detalles)
            {
                ProductoView p = pro_db.i_RetornarProducto(d.ProductoID);
                kardex.IngresarVenta(p, -d.Cantidad, DateTime.Now);
                db.i_EliminarDetalle(anular.ID, d);
            }
            db.i_EliminarVenta(anular.ID);
            return RedirectToAction("Index");
        }

    }
}
